/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * RegistroUnidad.java
 *
 * Created on 02-may-2012, 23:13:48
 */
package com.camachosanchez.gui;

import com.camachosanchez.bean.*;
import com.camachosanchez.controler.jdbc.TipoVehiculoJdbcControler;
import com.camachosanchez.controler.jdbc.VehiculosJdbcControler;
import com.camachosanchez.controler.jpa.DistribuidoresVehiculosJpaController;
import com.camachosanchez.controler.jpa.FlotillasJpaController;
import com.camachosanchez.controler.jpa.FormasPagoJpaController;
import com.camachosanchez.controler.jpa.MarcasVehiculoJpaController;
import com.camachosanchez.controler.jpa.TiposCombustibleJpaController;
import com.camachosanchez.controler.jpa.VehiculosJpaController;
import com.camachosanchez.gui.textfield.MaxLengthTextDocument;
import com.camachosanchez.util.Constantes;
import com.camachosanchez.util.GUIUtil;
import com.camachosanchez.util.SQLUtil;
import java.awt.Point;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JOptionPane;

/**
 *
 * @author Rolando
 */
public class RegistroUnidad extends javax.swing.JDialog {

    /**
     * Creates new form RegistroUnidad
     */
    public RegistroUnidad(java.awt.Frame parent, boolean modal) {
        initComponents();
        llenarListasDesplegables();
        setLocationRelativeTo(null);
        GUIUtil.addEscapeKey(this);
        dateFechaRegistro.setDate(new Date());
        dateFechaCompra.setDate(new Date());
        setModal(modal);
        MaxLengthTextDocument doc_placa = new MaxLengthTextDocument();
        MaxLengthTextDocument doc_serie = new MaxLengthTextDocument();
        MaxLengthTextDocument doc_motor = new MaxLengthTextDocument();
        MaxLengthTextDocument doc_factura = new MaxLengthTextDocument();
        MaxLengthTextDocument doc_codbarras = new MaxLengthTextDocument();
        MaxLengthTextDocument doc_inventario = new MaxLengthTextDocument();
        MaxLengthTextDocument doc_carga_kg = new MaxLengthTextDocument();
        MaxLengthTextDocument doc_carga_v = new MaxLengthTextDocument();
        MaxLengthTextDocument doc_capacidad = new MaxLengthTextDocument();
        MaxLengthTextDocument doc_precio = new MaxLengthTextDocument();
        doc_placa.setMaxChars(10, Constantes.ANY);
        doc_serie.setMaxChars(20, Constantes.CADENAS);
        doc_motor.setMaxChars(20, Constantes.CADENAS);
        doc_factura.setMaxChars(20, Constantes.CADENAS);
        doc_codbarras.setMaxChars(6, Constantes.CADENAS);
        doc_inventario.setMaxChars(20, Constantes.ENTEROS);
        doc_carga_kg.setMaxChars(8, Constantes.DECIMALES);
        doc_carga_v.setMaxChars(8, Constantes.DECIMALES);
        doc_capacidad.setMaxChars(8, Constantes.DECIMALES);
        doc_precio.setMaxChars(8, Constantes.DECIMALES);
        txtNumeroPlaca.setDocument(doc_placa);
        txtSerieChasis.setDocument(doc_serie);
        txtNumeroMotor.setDocument(doc_motor);
        txtNumeroFactura.setDocument(doc_factura);
        txtCodigoBarras.setDocument(doc_codbarras);
        txtNumeroInventario.setDocument(doc_inventario);
        txtCapacidadTanque.setDocument(doc_capacidad);
        txtCargaKg.setDocument(doc_carga_kg);
        txtCargaVolumen.setDocument(doc_carga_v);
        txtPrecio.setDocument(doc_precio);
        txtCapacidadTanque.setText("0.0");
        txtCargaKg.setText("0.0");
        txtCargaVolumen.setText("0.0");
        txtPrecio.setText("0.0");
        dateFechaRegistro.setMaxSelectableDate(new Date());
        dateFechaCompra.setMaxSelectableDate(new Date());
    }

    private void llenarListasDesplegables() {
        TipoVehiculoJdbcControler tipos_vehiculo_dao = new TipoVehiculoJdbcControler();
        MarcasVehiculoJpaController marcas_vehiculo_dao = new MarcasVehiculoJpaController(null);
        TiposCombustibleJpaController tipos_combustible_dao = new TiposCombustibleJpaController(null);
        FlotillasJpaController flotillas_dao = new FlotillasJpaController(null);
        DistribuidoresVehiculosJpaController distribuidor_dao = new DistribuidoresVehiculosJpaController(null);
        FormasPagoJpaController formas_pago_dao = new FormasPagoJpaController(null);

        List<TiposVehiculo> tipos_vehiculos = tipos_vehiculo_dao.findAll();
        List<MarcasVehiculo> marcas_vehiculos = marcas_vehiculo_dao.findMarcasVehiculoEntities();
        List<TiposCombustible> tipos_combustible = tipos_combustible_dao.findTiposCombustibleEntities();
        List<Flotillas> flotillas = flotillas_dao.findFlotillasEntities();
        List<DistribuidoresVehiculos> distribuidores = distribuidor_dao.findDistribuidoresVehiculosEntities();
        List<FormasPago> formas = formas_pago_dao.findFormasPagoEntities();

        tipos_combustible.add(0, null);
        cmbTipoUnidad.setModel(new DefaultComboBoxModel(tipos_vehiculos.toArray()));
        cmbMarcaUnidad.setModel(new DefaultComboBoxModel(marcas_vehiculos.toArray()));
        cmbTipoCombustible.setModel(new DefaultComboBoxModel(tipos_combustible.toArray()));
        cmbRazonSocial.setModel(new DefaultComboBoxModel(flotillas.toArray()));
        cmbDistribuidor.setModel(new DefaultComboBoxModel(distribuidores.toArray()));
        cmbFormaPago.setModel(new DefaultComboBoxModel(formas.toArray()));
        TiposVehiculo tipoSeleccionado = (TiposVehiculo) cmbTipoUnidad.getSelectedItem();
        List<TiposEje> ejes = tipoSeleccionado.getTiposEjeList();
        List<TiposEje> ejesActivos = new ArrayList<TiposEje>();
        for (TiposEje item : ejes) {
            if (item.getActivo()) {
                ejesActivos.add(item);
            }
        }
        cmbModelo.setModel(new DefaultComboBoxModel(ejesActivos.toArray()));
        actualizarImagenModelo();
    }

    private void actualizarImagenModelo() {
        TiposVehiculo tp = (TiposVehiculo) cmbTipoUnidad.getSelectedItem();
        TiposEje eje_seleccionado = (TiposEje) cmbModelo.getSelectedItem();
        if (tp != null && eje_seleccionado != null) {
            if (tp.getNombre().toUpperCase().compareTo("SEMIREMOLQUE") == 0) {
                Point p = SQLUtil.numeroEjes(eje_seleccionado.getId());
                txtNumeroEjes.setText("" + p.x);
                txtNumeroLlantas.setText("" + p.y);
                if (p.x < 6) {
                    lblImagen.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/camachosanchez/recursos/" + p.x + "-eje.png")));
                } else {
                    lblImagen.setIcon(null);
                }
            } else if (tp.getNombre().toUpperCase().compareTo("REMOLCADOR") == 0) {
                Point p = SQLUtil.numeroEjes(eje_seleccionado.getId());
                txtNumeroEjes.setText("" + p.x);
                txtNumeroLlantas.setText("" + p.y);
                if (p.x > 1 && p.x < 4) {
                    lblImagen.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/camachosanchez/recursos/" + p.x + "-eje-cabezal.png")));
                } else {
                    lblImagen.setIcon(null);
                }
            } else if (tp.getNombre().toUpperCase().compareTo("FURGÓN") == 0) {
                Point p = SQLUtil.numeroEjes(eje_seleccionado.getId());
                txtNumeroEjes.setText("" + p.x);
                txtNumeroLlantas.setText("" + p.y);
                if (p.x > 1 && p.x < 5) {
                    lblImagen.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/camachosanchez/recursos/" + p.x + "-eje-bus.png")));
                } else {
                    lblImagen.setIcon(null);
                }
            }
        }
    }

//    public void validarDisponibilidadEjes() {
//        if (TipoEjeJdbcControler.cantidadDisponibleTipoEje()) {
//            int opcionRegistrarNuevoModelo = JOptionPane.showConfirmDialog(Principal.getInstance(), "Se necesita al menos un modelo de unidad. ¿Desea registrar uno?", "Error", JOptionPane.YES_NO_OPTION);
//            if (opcionRegistrarNuevoModelo == JOptionPane.OK_OPTION) {
//                RegistroModeloEjes registroModeloEjes = new RegistroModeloEjes(Principal.getInstance(), true);
//                registroModeloEjes.setVisible(true);
//            }
//            btnGuardar.setEnabled(false);
//        } else {
//            btnGuardar.setEnabled(true);
//        }
//    }
    private void guardar() {
        String numero_placa = txtNumeroPlaca.getText().trim();
        String serie_chasis = txtSerieChasis.getText().trim();
        String numero_motor = txtNumeroMotor.getText().trim();
        String numero_factura = txtNumeroFactura.getText().trim();
        String codigo_barras = txtCodigoBarras.getText().trim();
        Date fecha_registro = dateFechaRegistro.getDate();
        MarcasVehiculo marca_vehiculo = (MarcasVehiculo) cmbMarcaUnidad.getSelectedItem();
        Flotillas flota = (Flotillas) cmbRazonSocial.getSelectedItem();
        if (numero_placa.isEmpty()) {
            JOptionPane.showMessageDialog(this, Constantes.CODIGO_NUMERO_PLACA_REQUERIDO, Constantes.DATOS_INCOMPLETOS, JOptionPane.WARNING_MESSAGE);
            txtNumeroPlaca.requestFocusInWindow();
            return;
        }
        if (marca_vehiculo == null) {
            JOptionPane.showMessageDialog(this, Constantes.MARCA_UNIDAD_REQUERIDO, Constantes.DATOS_INCOMPLETOS, JOptionPane.WARNING_MESSAGE);
            cmbMarcaUnidad.requestFocusInWindow();
            return;
        }
        if (flota == null) {
            JOptionPane.showMessageDialog(this, Constantes.RAZON_SOCIAL_REQUERIDO, Constantes.DATOS_INCOMPLETOS, JOptionPane.WARNING_MESSAGE);
            cmbRazonSocial.requestFocusInWindow();
            return;
        }
        TiposVehiculo tipo_vehiculo = (TiposVehiculo) cmbTipoUnidad.getSelectedItem();
        TiposCombustible combustible = (TiposCombustible) cmbTipoCombustible.getSelectedItem();
        double capacidad_tanque;
        try {
            capacidad_tanque = Double.parseDouble(txtCapacidadTanque.getText());
        } catch (NumberFormatException e) {
            JOptionPane.showMessageDialog(this, "El valor ingresado para la capacidad del tanque debe ser un número decimal.", "Datos incorrectos", JOptionPane.WARNING_MESSAGE);
            txtCapacidadTanque.requestFocusInWindow();
            return;
        }
        String numero_inventario = txtNumeroInventario.getText().trim();
        Date fecha_compra = dateFechaCompra.getDate();
        float maxima_capacidad_carga_kg;
        try {
            maxima_capacidad_carga_kg = Float.parseFloat(txtCargaKg.getText());
        } catch (NumberFormatException e) {
            JOptionPane.showMessageDialog(this, "El valor ingresado para la capacidad de carga debe ser un número decimal.", "Datos incorrectos", JOptionPane.WARNING_MESSAGE);
            txtCargaKg.requestFocusInWindow();
            return;
        }
        float maxima_capacidad_carga_volumen;
        try {
            maxima_capacidad_carga_volumen = Float.parseFloat(txtCargaVolumen.getText());
        } catch (NumberFormatException e) {
            JOptionPane.showMessageDialog(this, "El valor ingresado para la capacidad de carga debe ser un número decimal.", "Datos incorrectos", JOptionPane.WARNING_MESSAGE);
            txtCargaVolumen.requestFocusInWindow();
            return;
        }
        TiposEje ejes;
        if (cmbModelo.getSelectedItem() != null) {
            ejes = (TiposEje) cmbModelo.getSelectedItem();
        } else {
            JOptionPane.showMessageDialog(this, "Seleccione un modelo para el vehículo. Si no existe uno, ingréselo desde el menú Principal.", "Datos incompletos", JOptionPane.WARNING_MESSAGE);
            cmbModelo.requestFocusInWindow();
            return;
        }

        DistribuidoresVehiculos dist = (DistribuidoresVehiculos) cmbDistribuidor.getSelectedItem();
        FormasPago forma = (FormasPago) cmbFormaPago.getSelectedItem();
        double precio;
        try {
            precio = Double.parseDouble(txtPrecio.getText());
        } catch (NumberFormatException e) {
            JOptionPane.showMessageDialog(this, "El valor ingresado para el precio del equipo debe ser un número decimal.", "Datos incorrectos", JOptionPane.WARNING_MESSAGE);
            txtPrecio.requestFocusInWindow();
            return;
        }
        String comentario = txpComentarios.getText();
        if (numero_placa == null || numero_placa.isEmpty() || numero_placa.length() > 10) {
            JOptionPane.showMessageDialog(this, "El número de placa debe tener una longitud máxima de 20 caracteres.", "Datos incorrectos", JOptionPane.WARNING_MESSAGE);
            txtNumeroPlaca.requestFocusInWindow();
            return;
        }
        if (serie_chasis.length() > 20) {
            JOptionPane.showMessageDialog(this, "El número de serie del chasis debe tener una longitud máxima de 20 caracteres.", "Datos incorrectos", JOptionPane.WARNING_MESSAGE);
            txtSerieChasis.requestFocusInWindow();
            return;
        }
        if (numero_motor.length() > 20) {
            JOptionPane.showMessageDialog(this, "El número de serie del motor debe tener una longitud máxima de 20 caracteres.", "Datos incorrectos", JOptionPane.WARNING_MESSAGE);
            txtNumeroMotor.requestFocusInWindow();
            return;
        }
        if (numero_factura.length() > 20) {
            JOptionPane.showMessageDialog(this, "El número de factura debe tener una longitud máxima de 20 caracteres.", "Datos incorrectos", JOptionPane.WARNING_MESSAGE);
            txtNumeroFactura.requestFocusInWindow();
            return;
        }
        if (codigo_barras != null && !codigo_barras.isEmpty()) {
            char caracterInicial = codigo_barras.charAt(0);
            if (Character.isLetter(caracterInicial)) {
                String strNumero = codigo_barras.substring(1);
                try {
                    Integer numero = Integer.parseInt(strNumero);
                } catch (NumberFormatException e) {
                    JOptionPane.showMessageDialog(this, "El código de la unidad debe estar formado por una letra y un número.", "Datos incorrectos", JOptionPane.WARNING_MESSAGE);
                    txtCodigoBarras.requestFocusInWindow();
                    return;
                }
            } else {
                JOptionPane.showMessageDialog(this, "El código de la unidad debe estar formado por una letra y un número.", "Datos incorrectos", JOptionPane.WARNING_MESSAGE);
                txtCodigoBarras.requestFocusInWindow();
                return;
            }
        }
        if (codigo_barras.length() > 5) {
            JOptionPane.showMessageDialog(this, "El código debe tener una longitud máxima de 5 caracteres.", "Datos incorrectos", JOptionPane.WARNING_MESSAGE);
            txtCodigoBarras.requestFocusInWindow();
            return;
        }
        if (numero_inventario.length() > 20) {
            JOptionPane.showMessageDialog(this, "El número de inventario debe tener una longitud máxima de 20 caracteres.", "Datos incorrectos", JOptionPane.WARNING_MESSAGE);
            txtNumeroInventario.requestFocusInWindow();
            return;
        }
        String numero_baterias = spnNumeroBaterias.getValue().toString();
        Short num_baterias = 0;
        try {
            num_baterias = Short.parseShort(numero_baterias);
        } catch (NumberFormatException e) {
            JOptionPane.showMessageDialog(this, "El valor ingresado para el número de baterías debe ser un número.", "Datos incorrectos", JOptionPane.WARNING_MESSAGE);
            spnNumeroBaterias.requestFocusInWindow();
            return;
        }
        if (num_baterias > 5) {
            JOptionPane.showMessageDialog(this, "El número de baterías debe ser como máximo 5.", "Datos incorrectos", JOptionPane.WARNING_MESSAGE);
            spnNumeroBaterias.requestFocusInWindow();
            return;
        }
        Vehiculos equipo = new Vehiculos();
        equipo.setPlaca(numero_placa);
        equipo.setFechaRegistro(fecha_registro);
        equipo.setCapacidadTanque("" + capacidad_tanque);
        equipo.setSerieChasis(serie_chasis);
        equipo.setNumeroMotor(numero_motor);
        equipo.setNumeroInventario(numero_inventario);
        equipo.setFechaCompra(fecha_compra);
        equipo.setNumFacturaCompra(numero_factura);
        equipo.setPrecioVehiculo(precio);
        equipo.setMaximaCapacidadCargaPeso(maxima_capacidad_carga_kg);
        equipo.setMaximaCapacidadCargaVolumen(maxima_capacidad_carga_volumen);
        equipo.setCodBarras(codigo_barras);
        equipo.setComentarios(comentario);
        equipo.setEstado(true);
        equipo.setIdUsuario(Constantes.currentUser);
        equipo.setIdMarca(marca_vehiculo);
        equipo.setIdTipo(tipo_vehiculo);
        equipo.setIdDistribuidor(dist);
        equipo.setIdCombustible(combustible);
        equipo.setIdFormaPago(forma);
        equipo.setIdFlotilla(flota);
        equipo.setFechaInsercionActualizacion(new Date());
        equipo.setIdTipoEje(ejes);
        equipo.setNroBaterias(num_baterias);
        VehiculosJpaController dao = new VehiculosJpaController(null);
        dao.create(equipo);
        JOptionPane.showMessageDialog(this, "El equipo ha sido guardado correctamente.", "Operación finalizada", JOptionPane.INFORMATION_MESSAGE);
        dispose();
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        toolBarPrincipal = new javax.swing.JToolBar();
        pnlToolBar = new javax.swing.JPanel();
        btnNuevo = new javax.swing.JButton();
        btnGuardar = new javax.swing.JButton();
        pnlContenedor = new javax.swing.JPanel();
        pnlInformacionPrincipal = new javax.swing.JPanel();
        lblNumeroPlaca = new javax.swing.JLabel();
        txtNumeroPlaca = new javax.swing.JTextField();
        lblCodigoBarras = new javax.swing.JLabel();
        txtCodigoBarras = new javax.swing.JTextField();
        lblSerieChasis = new javax.swing.JLabel();
        txtSerieChasis = new javax.swing.JTextField();
        lblNumeroMotor = new javax.swing.JLabel();
        txtNumeroMotor = new javax.swing.JTextField();
        lblNumeroFactura = new javax.swing.JLabel();
        txtNumeroFactura = new javax.swing.JTextField();
        lblFechaRegistro = new javax.swing.JLabel();
        dateFechaRegistro = new com.toedter.calendar.JDateChooser();
        pnlInformacionTecnicaAlmacenamiento = new javax.swing.JPanel();
        pnlInformacionTecnica = new javax.swing.JPanel();
        pnlTipoUnidad = new javax.swing.JPanel();
        lblTipoUnidad = new javax.swing.JLabel();
        pnlListaTipoUnidad = new javax.swing.JPanel();
        cmbTipoUnidad = new javax.swing.JComboBox();
        pnlMarcaUnidad = new javax.swing.JPanel();
        lblMarcaUnidad = new javax.swing.JLabel();
        pnlComboMarcaUnidad = new javax.swing.JPanel();
        cmbMarcaUnidad = new javax.swing.JComboBox();
        pnlTipoCombustible = new javax.swing.JPanel();
        lblTipoCombustible = new javax.swing.JLabel();
        pnlComboTipoCombustible = new javax.swing.JPanel();
        cmbTipoCombustible = new javax.swing.JComboBox();
        pnlCapacidadTanque = new javax.swing.JPanel();
        lblCapacidadTanque = new javax.swing.JLabel();
        txtCapacidadTanque = new javax.swing.JTextField();
        pnlInformacionAlmacenamiento = new javax.swing.JPanel();
        pnpNumeroInventario = new javax.swing.JPanel();
        lblNumeroInventario = new javax.swing.JLabel();
        txtNumeroInventario = new javax.swing.JTextField();
        pnlFechaCompra = new javax.swing.JPanel();
        lblFechaCompra = new javax.swing.JLabel();
        dateFechaCompra = new com.toedter.calendar.JDateChooser();
        pnlRazonSocial = new javax.swing.JPanel();
        lblRazonSocial = new javax.swing.JLabel();
        pnlComboRazonSocial = new javax.swing.JPanel();
        cmbRazonSocial = new javax.swing.JComboBox();
        pnlCarga = new javax.swing.JPanel();
        lblCargaKg = new javax.swing.JLabel();
        txtCargaKg = new javax.swing.JTextField();
        lblCargaVolumen = new javax.swing.JLabel();
        txtCargaVolumen = new javax.swing.JTextField();
        tbpInformacion = new javax.swing.JTabbedPane();
        pnlSistemaEjes = new javax.swing.JPanel();
        lblNombreModelo = new javax.swing.JLabel();
        cmbModelo = new javax.swing.JComboBox();
        lblNumeroEjes = new javax.swing.JLabel();
        txtNumeroEjes = new javax.swing.JTextField();
        lblNumeroLlantas = new javax.swing.JLabel();
        txtNumeroLlantas = new javax.swing.JTextField();
        pnlDiseño = new javax.swing.JPanel();
        lblImagen = new javax.swing.JLabel();
        jLabel1 = new javax.swing.JLabel();
        spnNumeroBaterias = new javax.swing.JSpinner();
        pnlDistribuidorCostosComentarios = new javax.swing.JPanel();
        lblDistribuidor = new javax.swing.JLabel();
        cmbDistribuidor = new javax.swing.JComboBox();
        lblFormaPago = new javax.swing.JLabel();
        cmbFormaPago = new javax.swing.JComboBox();
        lblPrecio = new javax.swing.JLabel();
        txtPrecio = new javax.swing.JTextField();
        lblComentarios = new javax.swing.JLabel();
        scrComentarios = new javax.swing.JScrollPane();
        txpComentarios = new javax.swing.JTextPane();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle(".:: Registro de Unidades ::.");
        setResizable(false);

        toolBarPrincipal.setBackground(new java.awt.Color(204, 204, 255));
        toolBarPrincipal.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        toolBarPrincipal.setFloatable(false);
        toolBarPrincipal.setRollover(true);
        toolBarPrincipal.setOpaque(false);

        pnlToolBar.setBackground(new java.awt.Color(255, 255, 255));
        pnlToolBar.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT));

        btnNuevo.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/camachosanchez/recursos/24_new.png"))); // NOI18N
        btnNuevo.setToolTipText("Nuevo");
        btnNuevo.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
        btnNuevo.setFocusable(false);
        btnNuevo.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
        btnNuevo.setMaximumSize(new java.awt.Dimension(22, 22));
        btnNuevo.setMinimumSize(new java.awt.Dimension(22, 22));
        btnNuevo.setPreferredSize(new java.awt.Dimension(22, 22));
        btnNuevo.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnNuevo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnNuevoActionPerformed(evt);
            }
        });
        pnlToolBar.add(btnNuevo);

        btnGuardar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/camachosanchez/recursos/24_save.png"))); // NOI18N
        btnGuardar.setToolTipText("Guardar");
        btnGuardar.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
        btnGuardar.setFocusable(false);
        btnGuardar.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
        btnGuardar.setMaximumSize(new java.awt.Dimension(22, 22));
        btnGuardar.setMinimumSize(new java.awt.Dimension(22, 22));
        btnGuardar.setPreferredSize(new java.awt.Dimension(22, 22));
        btnGuardar.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnGuardar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnGuardarActionPerformed(evt);
            }
        });
        pnlToolBar.add(btnGuardar);

        toolBarPrincipal.add(pnlToolBar);

        getContentPane().add(toolBarPrincipal, java.awt.BorderLayout.PAGE_START);

        pnlInformacionPrincipal.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Información Principal", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 0, 12))); // NOI18N
        pnlInformacionPrincipal.setOpaque(false);
        pnlInformacionPrincipal.setLayout(new java.awt.GridLayout(3, 4, 5, 5));

        lblNumeroPlaca.setText("<html>Número de placa: <font color=\"red\">(*)</font> </html>");
        pnlInformacionPrincipal.add(lblNumeroPlaca);

        txtNumeroPlaca.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                txtNumeroPlacaKeyPressed(evt);
            }
        });
        pnlInformacionPrincipal.add(txtNumeroPlaca);

        lblCodigoBarras.setText("Código de unidad:");
        pnlInformacionPrincipal.add(lblCodigoBarras);

        txtCodigoBarras.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                txtCodigoBarrasKeyPressed(evt);
            }
        });
        pnlInformacionPrincipal.add(txtCodigoBarras);

        lblSerieChasis.setText("Serie de chasis:");
        pnlInformacionPrincipal.add(lblSerieChasis);

        txtSerieChasis.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                txtSerieChasisKeyPressed(evt);
            }
        });
        pnlInformacionPrincipal.add(txtSerieChasis);

        lblNumeroMotor.setText("Número de motor:");
        pnlInformacionPrincipal.add(lblNumeroMotor);

        txtNumeroMotor.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                txtNumeroMotorKeyPressed(evt);
            }
        });
        pnlInformacionPrincipal.add(txtNumeroMotor);

        lblNumeroFactura.setText("Número de factura:");
        pnlInformacionPrincipal.add(lblNumeroFactura);

        txtNumeroFactura.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                txtNumeroFacturaKeyPressed(evt);
            }
        });
        pnlInformacionPrincipal.add(txtNumeroFactura);

        lblFechaRegistro.setText("<html>Fecha de registro: <font color=\"red\">(*)</font> </html>");
        pnlInformacionPrincipal.add(lblFechaRegistro);

        dateFechaRegistro.setBackground(new java.awt.Color(255, 255, 255));
        dateFechaRegistro.setDateFormatString("dd/MM/yyyy");
        dateFechaRegistro.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                dateFechaRegistroKeyPressed(evt);
            }
        });
        pnlInformacionPrincipal.add(dateFechaRegistro);

        pnlInformacionTecnicaAlmacenamiento.setOpaque(false);
        pnlInformacionTecnicaAlmacenamiento.setLayout(new java.awt.GridLayout(1, 0));

        pnlInformacionTecnica.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Información Técnica", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 0, 12))); // NOI18N
        pnlInformacionTecnica.setOpaque(false);

        pnlTipoUnidad.setOpaque(false);
        pnlTipoUnidad.setLayout(new java.awt.GridLayout(1, 0));

        lblTipoUnidad.setText("Tipo de vehículo:");
        pnlTipoUnidad.add(lblTipoUnidad);

        pnlListaTipoUnidad.setOpaque(false);
        pnlListaTipoUnidad.setLayout(new java.awt.BorderLayout(5, 0));

        cmbTipoUnidad.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
        cmbTipoUnidad.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmbTipoUnidadActionPerformed(evt);
            }
        });
        cmbTipoUnidad.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                cmbTipoUnidadKeyPressed(evt);
            }
        });
        pnlListaTipoUnidad.add(cmbTipoUnidad, java.awt.BorderLayout.CENTER);

        pnlTipoUnidad.add(pnlListaTipoUnidad);

        pnlMarcaUnidad.setOpaque(false);
        pnlMarcaUnidad.setLayout(new java.awt.GridLayout(1, 2));

        lblMarcaUnidad.setText("<html>Marca de unidad: <font color=\"red\">(*)</font> </html>");
        pnlMarcaUnidad.add(lblMarcaUnidad);

        pnlComboMarcaUnidad.setOpaque(false);
        pnlComboMarcaUnidad.setLayout(new java.awt.BorderLayout(5, 0));

        cmbMarcaUnidad.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
        cmbMarcaUnidad.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                cmbMarcaUnidadKeyPressed(evt);
            }
        });
        pnlComboMarcaUnidad.add(cmbMarcaUnidad, java.awt.BorderLayout.CENTER);

        pnlMarcaUnidad.add(pnlComboMarcaUnidad);

        pnlTipoCombustible.setOpaque(false);
        pnlTipoCombustible.setLayout(new java.awt.GridLayout(1, 2));

        lblTipoCombustible.setText("Tipo de combustible:");
        pnlTipoCombustible.add(lblTipoCombustible);

        pnlComboTipoCombustible.setOpaque(false);
        pnlComboTipoCombustible.setLayout(new java.awt.BorderLayout(5, 0));

        cmbTipoCombustible.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
        cmbTipoCombustible.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                cmbTipoCombustibleKeyPressed(evt);
            }
        });
        pnlComboTipoCombustible.add(cmbTipoCombustible, java.awt.BorderLayout.CENTER);

        pnlTipoCombustible.add(pnlComboTipoCombustible);

        pnlCapacidadTanque.setOpaque(false);
        pnlCapacidadTanque.setLayout(new java.awt.GridLayout(1, 2));

        lblCapacidadTanque.setText("Capacidad del tanque (L):");
        pnlCapacidadTanque.add(lblCapacidadTanque);

        txtCapacidadTanque.setText("0");
        txtCapacidadTanque.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                txtCapacidadTanqueKeyPressed(evt);
            }
        });
        pnlCapacidadTanque.add(txtCapacidadTanque);

        javax.swing.GroupLayout pnlInformacionTecnicaLayout = new javax.swing.GroupLayout(pnlInformacionTecnica);
        pnlInformacionTecnica.setLayout(pnlInformacionTecnicaLayout);
        pnlInformacionTecnicaLayout.setHorizontalGroup(
            pnlInformacionTecnicaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(pnlTipoUnidad, javax.swing.GroupLayout.PREFERRED_SIZE, 340, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addComponent(pnlMarcaUnidad, javax.swing.GroupLayout.PREFERRED_SIZE, 340, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addComponent(pnlTipoCombustible, javax.swing.GroupLayout.PREFERRED_SIZE, 340, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addComponent(pnlCapacidadTanque, javax.swing.GroupLayout.PREFERRED_SIZE, 340, javax.swing.GroupLayout.PREFERRED_SIZE)
        );
        pnlInformacionTecnicaLayout.setVerticalGroup(
            pnlInformacionTecnicaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pnlInformacionTecnicaLayout.createSequentialGroup()
                .addComponent(pnlTipoUnidad, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(5, 5, 5)
                .addComponent(pnlMarcaUnidad, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(5, 5, 5)
                .addComponent(pnlTipoCombustible, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(5, 5, 5)
                .addComponent(pnlCapacidadTanque, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE))
        );

        pnlInformacionTecnicaAlmacenamiento.add(pnlInformacionTecnica);

        pnlInformacionAlmacenamiento.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Información de Almacenamiento", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 0, 12))); // NOI18N
        pnlInformacionAlmacenamiento.setOpaque(false);

        pnpNumeroInventario.setOpaque(false);
        pnpNumeroInventario.setLayout(new java.awt.GridLayout(1, 2));

        lblNumeroInventario.setText("Número de inventario:");
        pnpNumeroInventario.add(lblNumeroInventario);

        txtNumeroInventario.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                txtNumeroInventarioKeyPressed(evt);
            }
        });
        pnpNumeroInventario.add(txtNumeroInventario);

        pnlFechaCompra.setOpaque(false);
        pnlFechaCompra.setLayout(new java.awt.GridLayout(1, 2));

        lblFechaCompra.setText("Fecha de compra:");
        pnlFechaCompra.add(lblFechaCompra);

        dateFechaCompra.setDateFormatString("dd/MM/yyyy");
        dateFechaCompra.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                dateFechaCompraKeyPressed(evt);
            }
        });
        pnlFechaCompra.add(dateFechaCompra);

        pnlRazonSocial.setOpaque(false);
        pnlRazonSocial.setLayout(new java.awt.GridLayout(1, 2));

        lblRazonSocial.setText("<html>Razón Social: <font color=\"red\">(*)</font> </html>");
        pnlRazonSocial.add(lblRazonSocial);

        pnlComboRazonSocial.setOpaque(false);
        pnlComboRazonSocial.setLayout(new java.awt.BorderLayout(5, 0));

        cmbRazonSocial.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
        cmbRazonSocial.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                cmbRazonSocialKeyPressed(evt);
            }
        });
        pnlComboRazonSocial.add(cmbRazonSocial, java.awt.BorderLayout.CENTER);

        pnlRazonSocial.add(pnlComboRazonSocial);

        pnlCarga.setOpaque(false);
        pnlCarga.setLayout(new java.awt.GridLayout(1, 4, 4, 0));

        lblCargaKg.setText("Carga (kg):");
        pnlCarga.add(lblCargaKg);

        txtCargaKg.setText("0");
        txtCargaKg.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                txtCargaKgKeyPressed(evt);
            }
        });
        pnlCarga.add(txtCargaKg);

        lblCargaVolumen.setText("Carga (m³):");
        pnlCarga.add(lblCargaVolumen);

        txtCargaVolumen.setText("0");
        txtCargaVolumen.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                txtCargaVolumenKeyPressed(evt);
            }
        });
        pnlCarga.add(txtCargaVolumen);

        javax.swing.GroupLayout pnlInformacionAlmacenamientoLayout = new javax.swing.GroupLayout(pnlInformacionAlmacenamiento);
        pnlInformacionAlmacenamiento.setLayout(pnlInformacionAlmacenamientoLayout);
        pnlInformacionAlmacenamientoLayout.setHorizontalGroup(
            pnlInformacionAlmacenamientoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(pnpNumeroInventario, javax.swing.GroupLayout.PREFERRED_SIZE, 340, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addComponent(pnlFechaCompra, javax.swing.GroupLayout.PREFERRED_SIZE, 340, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addComponent(pnlRazonSocial, javax.swing.GroupLayout.PREFERRED_SIZE, 340, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addComponent(pnlCarga, javax.swing.GroupLayout.PREFERRED_SIZE, 340, javax.swing.GroupLayout.PREFERRED_SIZE)
        );
        pnlInformacionAlmacenamientoLayout.setVerticalGroup(
            pnlInformacionAlmacenamientoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pnlInformacionAlmacenamientoLayout.createSequentialGroup()
                .addComponent(pnpNumeroInventario, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(5, 5, 5)
                .addComponent(pnlFechaCompra, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(5, 5, 5)
                .addComponent(pnlRazonSocial, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(5, 5, 5)
                .addComponent(pnlCarga, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE))
        );

        pnlInformacionTecnicaAlmacenamiento.add(pnlInformacionAlmacenamiento);

        tbpInformacion.setOpaque(true);

        lblNombreModelo.setText("<html>Nombre del modelo: <font color=\"red\">(*)</font> </html>");

        cmbModelo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
        cmbModelo.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                cmbModeloItemStateChanged(evt);
            }
        });

        lblNumeroEjes.setText("Número de Ejes:");

        txtNumeroEjes.setEditable(false);

        lblNumeroLlantas.setText("Número de llantas:");

        txtNumeroLlantas.setEditable(false);

        pnlDiseño.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        pnlDiseño.setLayout(new java.awt.BorderLayout());

        lblImagen.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        pnlDiseño.add(lblImagen, java.awt.BorderLayout.CENTER);

        jLabel1.setText("Número de baterías:");

        spnNumeroBaterias.setModel(new javax.swing.SpinnerNumberModel(0, 0, 5, 1));

        javax.swing.GroupLayout pnlSistemaEjesLayout = new javax.swing.GroupLayout(pnlSistemaEjes);
        pnlSistemaEjes.setLayout(pnlSistemaEjesLayout);
        pnlSistemaEjesLayout.setHorizontalGroup(
            pnlSistemaEjesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pnlSistemaEjesLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(pnlSistemaEjesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(lblNumeroEjes, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(lblNombreModelo)
                    .addComponent(lblNumeroLlantas, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(pnlSistemaEjesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(txtNumeroLlantas)
                    .addComponent(txtNumeroEjes)
                    .addComponent(cmbModelo, 0, 174, Short.MAX_VALUE)
                    .addComponent(spnNumeroBaterias))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(pnlDiseño, javax.swing.GroupLayout.DEFAULT_SIZE, 383, Short.MAX_VALUE)
                .addContainerGap())
        );

        pnlSistemaEjesLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {lblNombreModelo, lblNumeroEjes, lblNumeroLlantas});

        pnlSistemaEjesLayout.setVerticalGroup(
            pnlSistemaEjesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pnlSistemaEjesLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(pnlSistemaEjesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(pnlSistemaEjesLayout.createSequentialGroup()
                        .addComponent(pnlDiseño, javax.swing.GroupLayout.DEFAULT_SIZE, 94, Short.MAX_VALUE)
                        .addContainerGap())
                    .addGroup(pnlSistemaEjesLayout.createSequentialGroup()
                        .addGroup(pnlSistemaEjesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(lblNombreModelo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(cmbModelo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(pnlSistemaEjesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(lblNumeroEjes)
                            .addComponent(txtNumeroEjes, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(pnlSistemaEjesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(lblNumeroLlantas)
                            .addComponent(txtNumeroLlantas, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(pnlSistemaEjesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jLabel1)
                            .addComponent(spnNumeroBaterias, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(0, 7, Short.MAX_VALUE))))
        );

        tbpInformacion.addTab("Sistema de Ejes", pnlSistemaEjes);

        lblDistribuidor.setText("Distribuidor:");

        cmbDistribuidor.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
        cmbDistribuidor.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                cmbDistribuidorKeyPressed(evt);
            }
        });

        lblFormaPago.setText("Forma de pago:");

        cmbFormaPago.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
        cmbFormaPago.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                cmbFormaPagoKeyPressed(evt);
            }
        });

        lblPrecio.setText("Precio ($):");

        txtPrecio.setText("0.0");
        txtPrecio.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                txtPrecioKeyPressed(evt);
            }
        });

        lblComentarios.setText("Comentarios:");

        scrComentarios.setViewportView(txpComentarios);

        javax.swing.GroupLayout pnlDistribuidorCostosComentariosLayout = new javax.swing.GroupLayout(pnlDistribuidorCostosComentarios);
        pnlDistribuidorCostosComentarios.setLayout(pnlDistribuidorCostosComentariosLayout);
        pnlDistribuidorCostosComentariosLayout.setHorizontalGroup(
            pnlDistribuidorCostosComentariosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pnlDistribuidorCostosComentariosLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(pnlDistribuidorCostosComentariosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(lblDistribuidor, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(lblComentarios, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(pnlDistribuidorCostosComentariosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(pnlDistribuidorCostosComentariosLayout.createSequentialGroup()
                        .addComponent(cmbDistribuidor, javax.swing.GroupLayout.PREFERRED_SIZE, 234, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(lblFormaPago, javax.swing.GroupLayout.PREFERRED_SIZE, 84, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(cmbFormaPago, javax.swing.GroupLayout.PREFERRED_SIZE, 111, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(lblPrecio, javax.swing.GroupLayout.PREFERRED_SIZE, 65, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(txtPrecio, javax.swing.GroupLayout.DEFAULT_SIZE, 89, Short.MAX_VALUE))
                    .addComponent(scrComentarios, javax.swing.GroupLayout.DEFAULT_SIZE, 611, Short.MAX_VALUE))
                .addContainerGap())
        );
        pnlDistribuidorCostosComentariosLayout.setVerticalGroup(
            pnlDistribuidorCostosComentariosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pnlDistribuidorCostosComentariosLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(pnlDistribuidorCostosComentariosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lblDistribuidor)
                    .addComponent(cmbDistribuidor, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(cmbFormaPago, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(lblPrecio)
                    .addComponent(txtPrecio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(lblFormaPago, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(pnlDistribuidorCostosComentariosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(lblComentarios)
                    .addComponent(scrComentarios, javax.swing.GroupLayout.DEFAULT_SIZE, 63, Short.MAX_VALUE))
                .addContainerGap())
        );

        tbpInformacion.addTab("Distribuidor, Costos y Comentarios", pnlDistribuidorCostosComentarios);

        javax.swing.GroupLayout pnlContenedorLayout = new javax.swing.GroupLayout(pnlContenedor);
        pnlContenedor.setLayout(pnlContenedorLayout);
        pnlContenedorLayout.setHorizontalGroup(
            pnlContenedorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pnlContenedorLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(pnlContenedorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(tbpInformacion, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
                    .addComponent(pnlInformacionPrincipal, javax.swing.GroupLayout.DEFAULT_SIZE, 704, Short.MAX_VALUE)
                    .addComponent(pnlInformacionTecnicaAlmacenamiento, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addContainerGap())
        );
        pnlContenedorLayout.setVerticalGroup(
            pnlContenedorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pnlContenedorLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(pnlInformacionPrincipal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(pnlInformacionTecnicaAlmacenamiento, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(tbpInformacion, javax.swing.GroupLayout.PREFERRED_SIZE, 144, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );

        getContentPane().add(pnlContenedor, java.awt.BorderLayout.CENTER);

        pack();
    }// </editor-fold>//GEN-END:initComponents

private void cmbModeloItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_cmbModeloItemStateChanged
// TODO add your handling code here:
    actualizarImagenModelo();
}//GEN-LAST:event_cmbModeloItemStateChanged

private void btnGuardarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnGuardarActionPerformed
// TODO add your handling code here:
    VehiculosJdbcControler daoJdbc = new VehiculosJdbcControler();
    if (!daoJdbc.existeVehiculo(txtNumeroPlaca.getText().trim())) {
        guardar();
    } else {
        JOptionPane.showMessageDialog(this, Constantes.EXISTE_UNIDAD, Constantes.DATOS_INCOMPLETOS, JOptionPane.WARNING_MESSAGE);
        txtNumeroPlaca.requestFocusInWindow();
    }
}//GEN-LAST:event_btnGuardarActionPerformed

    private void txtNumeroPlacaKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtNumeroPlacaKeyPressed
        // TODO add your handling code here:
        if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
            txtCodigoBarras.requestFocusInWindow();
        }
    }//GEN-LAST:event_txtNumeroPlacaKeyPressed

    private void txtSerieChasisKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtSerieChasisKeyPressed
        // TODO add your handling code here:
        if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
            txtNumeroMotor.requestFocusInWindow();
        }
    }//GEN-LAST:event_txtSerieChasisKeyPressed

    private void txtNumeroFacturaKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtNumeroFacturaKeyPressed
        // TODO add your handling code here:
        if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
            dateFechaRegistro.requestFocusInWindow();
        }
    }//GEN-LAST:event_txtNumeroFacturaKeyPressed

    private void txtCapacidadTanqueKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtCapacidadTanqueKeyPressed
        // TODO add your handling code here:
        if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
            txtNumeroInventario.requestFocusInWindow();
        }
    }//GEN-LAST:event_txtCapacidadTanqueKeyPressed

    private void txtCargaKgKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtCargaKgKeyPressed
        // TODO add your handling code here:
        if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
            txtCargaVolumen.requestFocusInWindow();
        }
    }//GEN-LAST:event_txtCargaKgKeyPressed

    private void txtNumeroMotorKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtNumeroMotorKeyPressed
        // TODO add your handling code here:
        if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
            txtNumeroFactura.requestFocusInWindow();
        }
    }//GEN-LAST:event_txtNumeroMotorKeyPressed

    private void cmbDistribuidorKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_cmbDistribuidorKeyPressed
        // TODO add your handling code here:
        if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
            cmbFormaPago.requestFocusInWindow();
        }
    }//GEN-LAST:event_cmbDistribuidorKeyPressed

    private void cmbFormaPagoKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_cmbFormaPagoKeyPressed
        // TODO add your handling code here:
        if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
            txtPrecio.requestFocusInWindow();
        }
    }//GEN-LAST:event_cmbFormaPagoKeyPressed

    private void txtPrecioKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtPrecioKeyPressed
        // TODO add your handling code here:
        if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
            txpComentarios.requestFocusInWindow();
        }
    }//GEN-LAST:event_txtPrecioKeyPressed

    private void dateFechaRegistroKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_dateFechaRegistroKeyPressed
        // TODO add your handling code here:
        if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
            cmbTipoUnidad.requestFocusInWindow();
        }
    }//GEN-LAST:event_dateFechaRegistroKeyPressed

    private void cmbTipoUnidadKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_cmbTipoUnidadKeyPressed
        // TODO add your handling code here:
        if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
            cmbMarcaUnidad.requestFocusInWindow();
        }
    }//GEN-LAST:event_cmbTipoUnidadKeyPressed

    private void cmbMarcaUnidadKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_cmbMarcaUnidadKeyPressed
        // TODO add your handling code here:
        if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
            cmbTipoCombustible.requestFocusInWindow();
        }
    }//GEN-LAST:event_cmbMarcaUnidadKeyPressed

    private void cmbTipoCombustibleKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_cmbTipoCombustibleKeyPressed
        // TODO add your handling code here:
        if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
            txtCapacidadTanque.requestFocusInWindow();
        }
    }//GEN-LAST:event_cmbTipoCombustibleKeyPressed

    private void txtNumeroInventarioKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtNumeroInventarioKeyPressed
        // TODO add your handling code here:
        if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
            dateFechaCompra.requestFocusInWindow();
        }
    }//GEN-LAST:event_txtNumeroInventarioKeyPressed

    private void dateFechaCompraKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_dateFechaCompraKeyPressed
        // TODO add your handling code here:
        if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
            cmbRazonSocial.requestFocusInWindow();
        }
    }//GEN-LAST:event_dateFechaCompraKeyPressed

    private void cmbRazonSocialKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_cmbRazonSocialKeyPressed
        // TODO add your handling code here:
        if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
            txtCargaKg.requestFocusInWindow();
        }
    }//GEN-LAST:event_cmbRazonSocialKeyPressed

    private void txtCargaVolumenKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtCargaVolumenKeyPressed
        // TODO add your handling code here:
        if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
            cmbModelo.requestFocusInWindow();
        }
    }//GEN-LAST:event_txtCargaVolumenKeyPressed

private void btnNuevoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnNuevoActionPerformed
// TODO add your handling code here:
    nuevo();
}//GEN-LAST:event_btnNuevoActionPerformed

private void cmbTipoUnidadActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmbTipoUnidadActionPerformed
// TODO add your handling code here:
    TiposVehiculo tipoSeleccionado = (TiposVehiculo) cmbTipoUnidad.getSelectedItem();
    List<TiposEje> ejes = tipoSeleccionado.getTiposEjeList();
    List<TiposEje> ejesActivos = new ArrayList<TiposEje>();
    for (TiposEje item : ejes) {
        if (item.getActivo()) {
            ejesActivos.add(item);
        }
    }
    if (!ejes.isEmpty()) {
        cmbModelo.setModel(new DefaultComboBoxModel(ejesActivos.toArray()));
        actualizarImagenModelo();
    } else {
        txtNumeroEjes.setText("0");
        txtNumeroLlantas.setText("0");
        cmbModelo.setModel(new DefaultComboBoxModel());
        lblImagen.setIcon(null);
    }

}//GEN-LAST:event_cmbTipoUnidadActionPerformed

private void txtCodigoBarrasKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtCodigoBarrasKeyPressed
// TODO add your handling code here:
    if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
        txtSerieChasis.requestFocusInWindow();
    }
}//GEN-LAST:event_txtCodigoBarrasKeyPressed
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnGuardar;
    private javax.swing.JButton btnNuevo;
    private javax.swing.JComboBox cmbDistribuidor;
    private javax.swing.JComboBox cmbFormaPago;
    private javax.swing.JComboBox cmbMarcaUnidad;
    private javax.swing.JComboBox cmbModelo;
    private javax.swing.JComboBox cmbRazonSocial;
    private javax.swing.JComboBox cmbTipoCombustible;
    private javax.swing.JComboBox cmbTipoUnidad;
    private com.toedter.calendar.JDateChooser dateFechaCompra;
    private com.toedter.calendar.JDateChooser dateFechaRegistro;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel lblCapacidadTanque;
    private javax.swing.JLabel lblCargaKg;
    private javax.swing.JLabel lblCargaVolumen;
    private javax.swing.JLabel lblCodigoBarras;
    private javax.swing.JLabel lblComentarios;
    private javax.swing.JLabel lblDistribuidor;
    private javax.swing.JLabel lblFechaCompra;
    private javax.swing.JLabel lblFechaRegistro;
    private javax.swing.JLabel lblFormaPago;
    private javax.swing.JLabel lblImagen;
    private javax.swing.JLabel lblMarcaUnidad;
    private javax.swing.JLabel lblNombreModelo;
    private javax.swing.JLabel lblNumeroEjes;
    private javax.swing.JLabel lblNumeroFactura;
    private javax.swing.JLabel lblNumeroInventario;
    private javax.swing.JLabel lblNumeroLlantas;
    private javax.swing.JLabel lblNumeroMotor;
    private javax.swing.JLabel lblNumeroPlaca;
    private javax.swing.JLabel lblPrecio;
    private javax.swing.JLabel lblRazonSocial;
    private javax.swing.JLabel lblSerieChasis;
    private javax.swing.JLabel lblTipoCombustible;
    private javax.swing.JLabel lblTipoUnidad;
    private javax.swing.JPanel pnlCapacidadTanque;
    private javax.swing.JPanel pnlCarga;
    private javax.swing.JPanel pnlComboMarcaUnidad;
    private javax.swing.JPanel pnlComboRazonSocial;
    private javax.swing.JPanel pnlComboTipoCombustible;
    private javax.swing.JPanel pnlContenedor;
    private javax.swing.JPanel pnlDiseño;
    private javax.swing.JPanel pnlDistribuidorCostosComentarios;
    private javax.swing.JPanel pnlFechaCompra;
    private javax.swing.JPanel pnlInformacionAlmacenamiento;
    private javax.swing.JPanel pnlInformacionPrincipal;
    private javax.swing.JPanel pnlInformacionTecnica;
    private javax.swing.JPanel pnlInformacionTecnicaAlmacenamiento;
    private javax.swing.JPanel pnlListaTipoUnidad;
    private javax.swing.JPanel pnlMarcaUnidad;
    private javax.swing.JPanel pnlRazonSocial;
    private javax.swing.JPanel pnlSistemaEjes;
    private javax.swing.JPanel pnlTipoCombustible;
    private javax.swing.JPanel pnlTipoUnidad;
    private javax.swing.JPanel pnlToolBar;
    private javax.swing.JPanel pnpNumeroInventario;
    private javax.swing.JScrollPane scrComentarios;
    private javax.swing.JSpinner spnNumeroBaterias;
    private javax.swing.JTabbedPane tbpInformacion;
    private javax.swing.JToolBar toolBarPrincipal;
    private javax.swing.JTextPane txpComentarios;
    private javax.swing.JTextField txtCapacidadTanque;
    private javax.swing.JTextField txtCargaKg;
    private javax.swing.JTextField txtCargaVolumen;
    private javax.swing.JTextField txtCodigoBarras;
    private javax.swing.JTextField txtNumeroEjes;
    private javax.swing.JTextField txtNumeroFactura;
    private javax.swing.JTextField txtNumeroInventario;
    private javax.swing.JTextField txtNumeroLlantas;
    private javax.swing.JTextField txtNumeroMotor;
    private javax.swing.JTextField txtNumeroPlaca;
    private javax.swing.JTextField txtPrecio;
    private javax.swing.JTextField txtSerieChasis;
    // End of variables declaration//GEN-END:variables

    private void nuevo() {
        GUIUtil.limpiarVentana(pnlInformacionPrincipal.getComponents());
        GUIUtil.limpiarVentana(pnlTipoUnidad.getComponents());
        GUIUtil.limpiarVentana(pnlMarcaUnidad.getComponents());
        GUIUtil.limpiarVentana(pnlTipoCombustible.getComponents());
        GUIUtil.limpiarVentana(pnlCapacidadTanque.getComponents());
        GUIUtil.limpiarVentana(pnlCarga.getComponents());
        GUIUtil.limpiarVentana(pnpNumeroInventario.getComponents());
        GUIUtil.limpiarVentana(pnlFechaCompra.getComponents());
        GUIUtil.limpiarVentana(pnlRazonSocial.getComponents());
        GUIUtil.limpiarVentana(pnlSistemaEjes.getComponents());
        GUIUtil.limpiarVentana(pnlDistribuidorCostosComentarios.getComponents());
        txtCargaKg.setText("0.0");
        txtCargaVolumen.setText("0.0");
        txtPrecio.setText("0.0");
        txtCapacidadTanque.setText("0.0");
        actualizarImagenModelo();
    }
}
